主题
设置输出目标 - LogSetTarget
函数简介
设置指定日志实例的输出目标。可同时组合:
- 内置:
FILE(文件)、CONSOLE(控制台) - 用户 Skin:由 LogRegisterSkin 返回的位枚举
接口名称
LogSetTargetDLL调用
c
int32_t LogSetTarget(int64_t instance, int64_t loggerHandle, int32_t targetFlags);参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| instance | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| loggerHandle | 长整数型 | 日志实例句柄(0 表示默认实例)。 |
| targetFlags | 整数型 | 输出目标位标志(见下表;可与用户 Skin 位或组合)。 |
LogTarget 枚举值
| 枚举值 | 值 | 说明 |
|---|---|---|
| OLA_LOG_TARGET_NONE | 0 | 无输出 |
| OLA_LOG_TARGET_FILE | 1 (1<<0) | 输出到文件 |
| OLA_LOG_TARGET_CONSOLE | 2 (1<<1) | 输出到控制台 |
| (预留) | 1<<2 … 1<<7 | 预留给未来内置目标 |
| 用户 Skin | LogRegisterSkin 返回值 | 落在掩码 OLA_LOG_TARGET_USER_SKIN_MASK(0xFFFFFF00,bit8..bit31) |
位运算组合示例
将需要的输出目标 按位或(|) 后传入 targetFlags:
csharp
// 同时输出到文件和控制台(默认值 3)
int targetFlags = 1 | 2; // OLA_LOG_TARGET_FILE | OLA_LOG_TARGET_CONSOLE
ola.LogSetTarget(0, targetFlags);
// 文件 + 自定义 Skin(skin 来自 LogRegisterSkin)
ola.LogSetTarget(logger, 1 | skinUi);
// 仅输出到某个 Skin
ola.LogSetTarget(logger, skinUi);
// 临时禁用所有输出
ola.LogSetTarget(0, 0); // OLA_LOG_TARGET_NONEcpp
int targetFlags = OLA_LOG_TARGET_FILE | OLA_LOG_TARGET_CONSOLE; // 3
ola.LogSetTarget(0, targetFlags);
// 两个 logger 分别绑定不同 Skin
ola.LogSetTarget(loggerA, OLA_LOG_TARGET_FILE | skinUi);
ola.LogSetTarget(loggerB, OLA_LOG_TARGET_CONSOLE | skinNet);python
target_flags = 1 | 2
ola.LogSetTarget(0, target_flags)
ola.LogSetTarget(logger, 1 | skin_ui)示例
FILE=1 CONSOLE=2,常用 1|2=3。可再与 LogRegisterSkin 返回位或组合。
SDK 调用
cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
const int64_t logger = 0; // 默认实例
ola.OpenConsole(0); // 打开本进程控制台
int ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
return;
}
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)csharp
using System;
using OLAPlug;
var ola = new OLAPlugServer();
long logger = 0;
ola.OpenConsole(0); // 打开本进程控制台
int ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) return;
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)python
from OLAPlugServer import OLAPlugServer
ola = OLAPlugServer()
logger = 0
ola.OpenConsole(0) # 打开本进程控制台
ret = ola.LogSetTarget(logger, 1 | 2) # FILE | CONSOLE
if ret != 1:
raise RuntimeError("failed")
ola.LogInfo("file + console")
# 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)java
import com.olaplug.OLAPlugServer;
OLAPlugServer ola = new OLAPlugServer();
long logger = 0;
ola.OpenConsole(0); // 打开本进程控制台
int ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
return;
}
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)go
import "github.com/ola/olaplug/olaplug"
ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
logger := int64(0)
ola.OpenConsole(0) // 打开本进程控制台
ret := ola.LogSetTarget(logger, 1 | 2) // FILE | CONSOLE
if ret != 1 {
return
}
ola.LogInfo("file + console")
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)rust
use olaplug::OLAPlugServer;
let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
let logger = 0i64;
ola.open_console(0); // 打开本进程控制台
let ret = ola.log_set_target(logger, 1 | 2); // FILE | CONSOLE
if ret != 1 {
return;
}
ola.log_info("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)cpp
var ola = com("OlaPlug.OlaSoft")
var logger = 0
ola.OpenConsole(0) // 打开本进程控制台
var ret = ola.LogSetTarget(logger, 1 | 2) // FILE | CONSOLE
if(ret == 1) {
ola.LogInfo("file + console")
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
}vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
logger = 0
ola.OpenConsole 0
ret = ola.LogSetTarget(logger, 3)
If ret = 1 Then
ola.LogInfo "file + console"
' 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
End Iftext
.局部变量 ola, OLAPlug
.局部变量 ret, 整数型
.局部变量 logger, 长整数型
ola.Create ()
logger = 0
ola.OpenConsole (0) ' 打开本进程控制台
ret = ola.LogSetTarget (logger, 位或 (1, 2)) ' FILE | CONSOLE
.如果真 (ret = 1)
ola.LogInfo (“file + console”)
' 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
.如果真结束aardio
import OLAPlugServer;
var ola = OLAPlugServer();
var logger = 0;
ola.OpenConsole(0); // 打开本进程控制台
var ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if(ret == 1){
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
}text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
长整数 logger = 0
ola.OpenConsole(0) ' 打开本进程控制台
整数 ret = ola.LogSetTarget(logger, 1 位或 2) ' FILE | CONSOLE
如果真 (ret = 1)
{
ola.LogInfo("file + console")
' 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
}cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
int64_t logger = 0;
ola.OpenConsole(0); // 打开本进程控制台
int32_t ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
return;
}
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)原生 DLL 调用
cpp
long instance = CreateCOLAPlugInterFace();
long logger = 0;
OpenConsole(instance, 0);
int ret = LogSetTarget(instance, logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
return;
}
LogInfo(instance, "file + console");
// LogSetTarget(instance, logger, 1 | skin);csharp
using System.Runtime.InteropServices;
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int OpenConsole(long ola, int type);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int LogSetTarget(long ola, long loggerHandle, int targetFlags);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int LogInfo(long ola, string message);
long instance = CreateCOLAPlugInterFace();
long logger = 0;
OpenConsole(instance, 0);
int ret = LogSetTarget(instance, logger, 1 | 2);
if (ret != 1) return;
LogInfo(instance, "file + console");python
from ctypes import CDLL, c_int, c_int64
ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
logger = 0
ola.OpenConsole(instance, 0)
ret = ola.LogSetTarget(instance, logger, 1 | 2)
if ret != 1:
raise RuntimeError("LogSetTarget failed")
ola.LogInfo(instance, b"file + console")返回值
| 返回值 | 说明 |
|---|---|
1 | 成功。 |
0 | 失败。 |
注意事项
| 项目 | 说明 |
|---|---|
| 默认值 | OLA_LOG_TARGET_FILE | OLA_LOG_TARGET_CONSOLE (3)。 |
| 用户 Skin | 先 LogRegisterSkin 再把返回值或进 targetFlags。 |
| 回调类型 | 见 OLALogSkinCallback。 |
| 级别过滤 | 被 LogSetLevel 过滤的日志不触发 Skin 回调。 |
| 回调编码 | 跟随 DefaultReturnEncoding(与 API 返回字符串一致)。 |
| 已注销 Skin | flags 中残留的 Skin 位会被静默忽略,不失败。 |
| 控制台颜色 | 控制台输出支持按级别着色。 |
| 立即生效 | 若日志系统已初始化,会自动重新初始化 sinks。 |
| OLA_LOG_TARGET_NONE | 设置为 0 可临时禁用该 logger 的输出。 |
相关接口
| 接口 | 说明 |
|---|---|
| LogRegisterSkin | 注册全局 Skin。 |
| LogUnregisterSkin | 注销 Skin。 |
| LogClearSkins | 清空全部 Skin。 |
| OpenConsole | 需要控制台输出时可先打开控制台。 |
